Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Рефакторинг доменной модели #10

Merged
merged 56 commits into from
Sep 15, 2022

Conversation

Stepami
Copy link
Owner

@Stepami Stepami commented Sep 9, 2022

Когда проект только создавался, выбор языка (и уж тем более Объектно-Ориентированного) был мотивирован тем, чтобы упростить разработку такой сложной программы как интерпретатор путём моделирования сущностей из предметной области Конструирования Компиляторов.

Правда в силу сжатых сроков в университете и ограниченности личного времени, проектирование архитектуры было проведено на скорую руку. Результаты этого видны уже сейчас.

Нет единого языка, предметной области, ограничения контекстов. Именования пространств имён отвратительное. Всё это требует переработки и улучшения.

Также будет осуществлён переезд на .NET 6

@github-actions
Copy link

github-actions bot commented Sep 9, 2022

File Coverage Branches Missing
All files 35% 31%
Interpreter.Lib.BackEnd.Frame 62% 25%
Interpreter.Lib.BackEnd.Instructions.CallFunction 72% 62% 18 35-38
Interpreter.Lib.BackEnd.Instructions.DotAssignment 75% 50%
Interpreter.Lib.BackEnd.Instructions.Simple 35% 22% 28-30 37-45 56-63 65-69 78-81

Minimum allowed coverage is 80%

Generated by 🐒 cobertura-action against f5c850c

@Stepami
Copy link
Owner Author

Stepami commented Sep 9, 2022

Также этот PR вытекает напрямую из #5

@Stepami
Copy link
Owner Author

Stepami commented Sep 12, 2022

Изменения архитектуры проекта настолько большие, что на данный момент невозможно досконально изучить последствия для работоспособности приложения. Поэтому в рамках этой доработки покрытие unit тестов будет станет не меньше 80%. Соответственно, будет написано много тестов

@Stepami
Copy link
Owner Author

Stepami commented Sep 12, 2022

При многократной проверке проекта было выявлено, что такие конструкты как BB и CFG сейчас излишни. Их использование оправдано только при построении SSA формы и, как следствие, реализации алгоритмов оптимизации.

Сейчас они перегружают домен.

https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/lectures/14/Slides14.pdf

https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/lectures/15/Slides15.pdf

@Stepami
Copy link
Owner Author

Stepami commented Sep 12, 2022

Также был выявлен баг - номера инструкций в некоторых случая криво присваиваются - возникает вечный цикл, например

Это решится только в рамках #4
Сейчас обходы AST крайне не прозрачны

@Stepami
Copy link
Owner Author

Stepami commented Sep 12, 2022

Благодаря рефакторингу домена удалось завершить инфраструктурный рефакторинг, остановленный в #5 по причинам, описанным в #5 (comment)

FrontEnd - лексер, парсер (создание AST)
IR - промежуточное представление (AST, проверка семантики)
BackEnd - виртуальная машина и её инструкции
@Stepami Stepami merged commit 4b1aa2c into master Sep 15, 2022
@Stepami Stepami deleted the refactoring/domain branch September 15, 2022 21:21
@Stepami Stepami added Architecture FrontEnd Working on frontend of the interpreter BackEnd Working on backend of the interpreter labels Dec 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Architecture BackEnd Working on backend of the interpreter FrontEnd Working on frontend of the interpreter
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant